<?php
	class AtividadeVersao{
		public $idVersao;
		public $idAtividade;
		public $idUsuario;
		public $idCurso;
		public $idGrupo;
		public $dataHora;
		public $nota;
		public $corrigido;
		public $lancado; //no caso do envio diz se a atividade ainda pode ser enviada pelo aluno (a nota já esta valendo) / no caso do questionario diz se o professor já lançou a correção (a nota ainda não está valendo)
		public $enviado;
		public $comentarioProfessor = null;
		
		public $tipo;
		
		public $respostas = array();
		
		public $arquivos = array(); //TODO isso tem q ser instancia de algum objeto!!
		
		public $comentarioAluno = null; //só para envio e atv offline
		
		public $emGrupo = false;
		
		public function AtividadeVersao($idVersao = NULL, $arrParam = NULL, $tipo = 'questionario'){
			if(is_numeric($idVersao) || is_array($arrParam)){
				$this->tipo = $tipo;
				if(is_numeric($idVersao)){
					$strQuery = "SELECT * FROM atividadeVersoes WHERE idVersao = $idVersao";
					if(!$resultTable = BancoDados::query($strQuery)) return false;
					$arrParam = $resultTable[0];
				}
				if(is_array($arrParam)){
					$this->idVersao		 = 	$arrParam["idVersao"];
					$this->idAtividade	 = 	$arrParam["idAtividade"];
					$this->idUsuario	 = 	$arrParam["idUsuario"];
					$this->idCurso		 = 	$arrParam["idCurso"];
					$this->idGrupo 		 = 	$arrParam["idGrupo"];
					$this->dataHora 	 = 	$arrParam["dataHora"];
					$this->corrigido	 = 	$arrParam["corrigido"];
					$this->lancado		 = 	$arrParam["lancado"];
					$this->enviado 		 = 	$arrParam["enviado"];
					$this->nota			 = 	$arrParam["nota"];
					$this->comentarioProfessor =  $arrParam["comentario"];
					if(is_numeric($this->idVersao)){
						$strQuery1 = "SELECT * FROM atividadePerguntaRespostas WHERE idVersao = $this->idVersao";
						if($resultado1 = BancoDados::query($strQuery1)){
							foreach($resultado1 as $indice => $conteudo){			
								array_push($this->respostas, $conteudo);
							}
						}		
					}
					if($this->tipo == 'envio' || $this->tipo == 'envioMultiplo'){
						$this->arquivos = AtividadeArquivo::getLista($this->idVersao);
						if(isset($this->respostas[0]['resposta']))
							$this->comentarioAluno = $this->respostas[0]['resposta'];
						
					}
					if(is_numeric($this->idGrupo) && $this->idGrupo != 0){
						$this->emGrupo = true;
					}
					
					$query2 = "	SELECT emGrupo FROM atividades WHERE idAtividade = ".$this->idAtividade;
					$result = BancoDados::query($query2);
					$this->emGrupo = $result[0][0] == 1 ? true : false;
					
					if($this->emGrupo){
					 	$query3 = "	SELECT g.idGrupo FROM gurpos g, gruposUsuarios gu 
					 				WHERE g.idGrupo = gu.idGrupo AND gu.idUsuario = $this->idUsuario";
						$result = BancoDados::query($query3);
						$this->idGrupo = $result[0][0];
					}
				}
			}
		}
		
		public static function getTodasVersoesAtividade($idAtividade, $tipoPadrao = 'array'){
			$strQuery = "SELECT * FROM atividadeVersoes WHERE idAtividade = $idAtividade ORDER BY dataHora DESC";
			$arrayVersoes = array();
			if($resultTable = BancoDados::query($strQuery)){
				foreach($resultTable as $indice => $resultArr){
					if($tipoPadrao == 'array'){
						array_push($arrayVersoes, obj2arr(new AtividadeVersao(NULL, $resultArr)));
					}else{
						array_push($arrayVersoes, (new AtividadeVersao(NULL, $resultArr)));
					}
				}
			}
			
			if(count($arrayVersoes) != 0)	return $arrayVersoes;	
			else							return null;
		}
		
		public static function getVersoesAluno($idAtividade, $idUsuario, $tipoPadrao = 'objeto', $tipo = 'questionario', $emGrupo = false){
			$strQuery = $emGrupo ?
			"	SELECT * FROM atividadeVersoes v 
				LEFT JOIN grupos g ON v.idGrupo = g.idGrupo 
				LEFT JOIN gruposUsuarios gu ON g.idUsuario = gu.idUsuario 
				WHERE v.idAtividade = $idAtividade 
				AND gu.idUsuario = $idUsuario ORDER BY dataHora DESC" :
			"	SELECT * FROM atividadeVersoes WHERE idAtividade = $idAtividade AND idUsuario = $idUsuario ORDER BY dataHora DESC";

			$arrayVersoes = array();
			if($resultTable = BancoDados::query($strQuery)){
				foreach($resultTable as $indice => $resultArr){
					if($tipoPadrao == 'objeto'){
						array_push($arrayVersoes, (new AtividadeVersao(NULL, $resultArr, $tipo)));
					}else{
						array_push($arrayVersoes, obj2arr(new AtividadeVersao(NULL, $resultArr, $tipo)));
					}
				}
			}
			if(count($arrayVersoes) != 0)	return $arrayVersoes;	
			else							return null;
		}
		
		
		public static function getUltimaVersaoAluno($idAtividade, $idUsuario, $tipoRetorno = 'objeto', $tipo = 'envio', $emGrupo = false){
			$strQuery = $emGrupo ?
			"	SELECT * FROM atividadeVersoes v 
				LEFT JOIN grupos g ON v.idGrupo = g.idGrupo 
				LEFT JOIN gruposUsuarios gu ON g.idUsuario = gu.idUsuario 
				WHERE v.idAtividade = $idAtividade 
				AND gu.idUsuario = $idUsuario 
				ORDER BY dataHora DESC LIMIT 1" :
			"	SELECT * FROM atividadeVersoes 
				WHERE idAtividade = $idAtividade 
				AND idUsuario = $idUsuario 
				ORDER BY dataHora DESC LIMIT 1" ;
			
			if($result = BancoDados::query($strQuery)){
				if($tipoRetorno === 'array'){
					return obj2arr(new AtividadeVersao(NULL, $result[0], $tipo));
				}else{
					return new AtividadeVersao(NULL, $result[0], $tipo);
				}
			}else{
				return false;
			}
		}
		
		public static function getUltimaVersaoRespondida($idUsuario, $idCurso, $idAtividade, $tipoRetorno = 'array', $tipo = 'questionario'){
			return self::getUltimaVersaoAluno($idAtividade, $idUsuario, $tipoRetorno, $tipo);
		}
		
		public static function getUltimaVersaoCorrigida($idAtividade, $idUsuario, $emGrupo = false){
			$strQuery = $emGrupo ?
			"	SELECT * FROM atividadeVersoes v 
				LEFT JOIN grupos g ON v.idGrupo = g.idGrupo 
				LEFT JOIN gruposUsuarios gu ON g.idUsuario = gu.idUsuario 
				WHERE v.idAtividade = $idAtividade 
				AND gu.idUsuario = $idUsuario 
				AND corrigido = 1 
				ORDER BY dataHora DESC LIMIT 1" :
			"	SELECT * FROM atividadeVersoes 
				WHERE idAtividade = $idAtividade 
				AND idUsuario = $idUsuario 
				AND corrigido = 1 
				ORDER BY dataHora DESC LIMIT 1" ;

			if($resultTable = BancoDados::query($strQuery))
				return NEW AtividadeVersao(NULL, $resultTable[0]);
			else
				return null;
		}
		
		public function inserir(){
			//if($this->validar()){
				if($this->tipo == 'questionario' || $this->tipo == 'teste'){
					//apaga versoes anteriores do banco porque esse tipo de atv não tem versões
					$query0 = !$this->emGrupo ?
								"SELECT count(*) FROM atividadeVersoes 
								WHERE idUsuario = $this->idUsuario AND idAtividade = $this->idAtividade" :
								"SELECT count(*) FROM atividadeVersoes 
								WHERE idGrupo = $this->idGrupo AND idAtividade = $this->idAtividade" ;
					
					if($valor = BancoDados::query($query0)){
						if($valor[0][0] != 0){
							$query1 = !$this->emGrupo ?
								"DELETE FROM atividadeVersoes WHERE idUsuario = $this->idUsuario AND idAtividade = $this->idAtividade":
								"DELETE FROM atividadeVersoes WHERE idGrupo = $this->idGrupo AND idAtividade = $this->idAtividade";
							BancoDados::query($query1);
							$query2 = "DELETE FROM atividadePerguntaRespostas WHERE idVersao = $this->idVersao";
						}
					}atualizaCurso();
				}
				$strQuery = "INSERT INTO atividadeVersoes VALUES(DEFAULT, $this->idAtividade, $this->idUsuario, $this->idCurso, $this->idGrupo,NOW(),$this->nota,$this->corrigido,$this->lancado,$this->enviado, '$this->comentarioProfessor')";
				if($retorno1 = BancoDados::query($strQuery)){
					/*
					$idUsuario = $this->idUsuario ? $this->idUsuario : 'NULL';
					$idGrupo = $this->idGrupo ? $this->idGrupo : 'NULL';
					$strQuery1 = "SELECT idVersao FROM atividadeVersoes WHERE idAtividade = $this->idAtividade AND idUsuario = $idUsuario AND idGrupo = $idGrupo AND corrigido = $this->corrigido AND lancado = $this->lancado AND enviado = $this->enviado ORDER BY idVersao DESC";
					debug($strQuery1);
					if($resut = BancoDados::query($strQuery1)){
						$this->idVersao = $resut[0][0];
						$inseriuResposta = true;
					}else{
						
					}
					 * 
					 */
					$this->idVersao = $retorno1;
					debug($this->idVersao, 'TESTE');
					
					if($this->respostas != null){
						foreach($this->respostas as $resposta){atualizaCurso();
							if(!($this->inserirResposta($resposta))){
								$inseriuResposta = false;
							}
						}atualizaCurso();
					}
					if($this->comentarioAluno != null){
						$resposta['idPergunta'] = 0;
						$resposta['resposta'] = $this->comentarioAluno;
						$resposta['tipoQuestao'] = 'dissertativa';
												
						if(!($this->inserirResposta($resposta))){
							$inseriuResposta = false;
						}
					}
					atualizaCurso();
					return $inseriuResposta;
				}else{
					return false;
				}
		}
		
		public function atualizarResposta(){
			$atualizou = true;
			$strQuery0 = "UPDATE atividadeVersoes SET enviado = $this->enviado, dataHora = NOW()  WHERE idVersao = $this->idVersao";
			if(!BancoDados::query($strQuery0)){
					$atualizou = false;
			}
			$strQuery = "DELETE FROM atividadePerguntaRespostas WHERE idVersao = $this->idVersao";
			if(!BancoDados::query($strQuery)){
					$atualizou = false;
			}
			if($this->respostas != null){
				foreach($this->respostas as $resposta){
					if(!($this->inserirResposta($resposta))){
						$atualizou = false;
					}
				}
			}
			atualizaCurso();
			return $atualizou;
		}
		
		public function atualizar($idUsuario){
			$atualizou = true;
			$query = "UPDATE atividadeVersoes SET nota = $this->nota, lancado = $this->lancado, corrigido = $this->corrigido ,  comentario = '$this->comentarioProfessor' WHERE idVersao = $this->idVersao";
			if(BancoDados::query($query)){
				foreach($this->respostas as $resposta){
					$strQuery = "UPDATE atividadePerguntaRespostas SET nota = $resposta[nota] WHERE idPergunta = $resposta[idPergunta]";
					if(!BancoDados::query($strQuery)){
						$atualizou = false;
					}
				}
			}
			atualizaCurso();
			return $atualizou;
		}
		
		public function atualizarCorrecao(){
			$atualizou = true;
			$this->corrigido = 1;
			$strQuery = "UPDATE atividadeVersoes SET nota = '$this->nota', comentario = '$this->comentarioProfessor', lancado = $this->lancado, corrigido = 1  WHERE idVersao = $this->idVersao";
			
			debug2($strQuery);
			
			
			if(!BancoDados::query($strQuery)){
					$atualizou = false;
			}
			atualizaCurso();
			return $atualizou;
		}
		
		public function apagar(){
			$apagou = true;
			$strQuery = "DELETE FROM atividadeVersoes WHERE idVersao = $this->idVersao";
			if(BancoDados::query($strQuery)){
				if(count($this->respostas)>0){
					$strQuery1 = "DELETE FROM atividadePerguntaRespostas WHERE idVersao = $this->idVersao";
					if(!BancoDados::query($strQuery1)){
						$apagou = false;
					}
				}
				atualizaCurso();
				return $apagou;
			}
		}
		
		public function inserirResposta($resposta){
			debug($this->idVersao);
			if(isset($resposta['tipoQuestao']) && $resposta['tipoQuestao'] == 'dissertativa'){
				$strQuery = "INSERT INTO atividadePerguntaRespostas VALUES(DEFAULT, $resposta[idPergunta],". $this->idVersao ." ,null, '$resposta[resposta]', null)";
			}else{
				$strQuery = "INSERT INTO atividadePerguntaRespostas VALUES(DEFAULT, $resposta[idPergunta], ". $this->idVersao .", $resposta[idAlternativa],null,null)";
			}
			if(BancoDados::query($strQuery)){
				atualizaCurso();
				return true;
			}else{
				return false;
			}
		}
		
	}
?>